package server

import (
	"edata-hub/pkg/raft"
	"edata-hub/pkg/server/services"
)

// Master
// 主控节点结构体
type Master struct {
	RServer          *raft.Raft //使用 raft 包中的 Raft
	Config           Config
	Join             string
	Msg              raft.Message
	WorkerRpcClients map[string]services.WorkerServiceClient
}

// StartServer
// 启动 Master
func (m *Master) StartServer() {

	// 初始化输出日志对象
	m.Msg = raft.Message{PrintLevel: 1}
	/*初始化Raft，并启动*/
	m.RServer = &raft.Raft{
		Config: m.Config.RaftConfig,
		Role:   "Leader",
	}
	m.WorkerRpcClients = make(map[string]services.WorkerServiceClient)
	m.RServer.Initialize()
	/*创建外部命令，并循环注册到Raft对象中*/
	m.InitExCommand()
	/*创建http服务，注册相关接口方法*/
	m.InitExHttpServices()
	/*初始化命令优化器*/
	m.InitExCommandOptimizer()
	m.RServer.Start()
}
